package com.nx.currnet;

import lombok.extern.slf4j.Slf4j;
import sun.misc.Unsafe;

import java.lang.reflect.Field;


/**
* 自己来模拟锁
* *
自旋来实现同步(局限)
* *
1、什么是锁？
* 目标：同步 多线程之间一前一后的执行
* *
其实就是一个标识；如果这个标识改变成了某个状态我们就理解为获取锁（正常放回）
* 拿不到锁其实就是陷入阻塞（死循环） 让这个方法不返回
*/
@Slf4j(topic="lock")
public class CustomnLock {

    volatile int status = 0;//t1---1
    private static Unsafe unsafe = null;
    private static long statusOffset;

    //获取unsafe对象
    static {
        Field singleoneInstanceField = null;
        try {
            singleoneInstanceField = Unsafe.class.getDeclaredField("theUnsafe");
            singleoneInstanceField.setAccessible(true);
            unsafe = (Unsafe) singleoneInstanceField.get(null);
           // statusOffset = unsafe.objectFieldOffset        (com.shadow.concurrent.CustomLock.class.getDeclaredField("status"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }





}